package com.lxf.Controller;

import com.lxf.pojo.Product;
import com.lxf.pojo.R;
import com.lxf.pojo.User;
import com.lxf.service.UserService;
import lombok.val;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

//@Controller
//@ResponseBody
@RestController
@RequestMapping("/users")
public class UserController {

    //    @Qualifier(value = "userService")作用：根据修改autowired默认不在根据类型注入 修改为根据名称注入
    @Autowired
    private UserService userService;

    //登录
    @RequestMapping("login")
    public R login(String userName,String pwd) {
        User user = userService.logins(userName);
        if (ObjectUtils.isEmpty(user)) {		//判断输入的用户名是否存在对象中，不存在则提示：用户名不存在
            return R.error().errorMsg("用户不存在").success(false);
        } else if (!user.getPwd().equals(pwd)) {//判断密码与用户名是否匹配
            return R.error().errorMsg("用户密码不匹配");
        } else {
            User ue=userService.account(user.getId());
            user.setAmount(ue.getAmount());
            System.out.println(123123);;
            return R.ok().date("data", user).errorMsg("登录成功").success(true);
        }
    }

    //    查看用户是否存在
    @RequestMapping("findName")
    public R findName(String userName) {
        User name = userService.logins(userName);
        if (ObjectUtils.isEmpty(name)) {//判断用户名是否存在
            return R.ok().date("name", name).errorMsg("用户不存在").success(true);
        } else {
            return R.error().errorMsg("用户已存在");
        }

    }

    //用户注册
    @RequestMapping("register")
    public R register (@RequestBody User user){
        int num = userService.insert(user);
        if (num > 0) {
            int nums=userService.addaccount(user.getUserName());
            return R.ok().date("num", num).errorMsg("注册成功").success(true);
        } else {
            return R.error();
        }

    }


    //删除用户足迹(同时删除多条)
    @RequestMapping("delFoot")
    public R delFoot(@RequestBody int[] ids){
        boolean flag=true;
        for (int i=0;i<ids.length;i++){
            boolean delflag=userService.delFoot(ids[i]);
            if(!delflag){
                flag=false;
            }
        }
        if(flag){
            return R.ok().errorMsg("删除成功!");
        }else{
            return R.error().errorMsg("删除失败");
        }
    }
    //删除用户足迹(删除一条)
    @DeleteMapping("delFoot/{id}")
    public R delFoot(@PathVariable int id){
        boolean delflag=userService.delFoot(id);
        if(delflag){
            return R.ok().errorMsg("删除成功!");
        }else{
            return R.error().errorMsg("删除失败");
        }
    }

    //修改用户信息
    @RequestMapping("updateUser")
    public R delFoot(@RequestParam String password,@RequestBody User u){
        User user=userService.logins(u.getUserName());
        if(password.equals(user.getPwd())){
            int num=userService.userUpdate(u);
            if(num!=0){
                return R.ok().errorMsg("修改成功!");
            }else{
                return R.error().errorMsg("修改失败!");
            }
        }else{
            return R.error().errorMsg("原密码错误");
        }
    }

    //新增用户收藏
    @GetMapping("/insertCollect/{userId}/{productId}")
    public R insertCollect(@PathVariable int userId,@PathVariable int productId){
        int num=userService.insertCollect(userId,productId);
        if(num>0){
            return R.ok().errorMsg("已添加收藏!");
        }else{
            return R.error().errorMsg("收藏添加失败");
        }
    }

    //删除收藏
    @DeleteMapping("/delCollect/{userId}/{productId}")
    public R delCollect(@PathVariable int userId,@PathVariable int productId){
        int num=userService.deluserCollect(userId,productId);
        if(num>0){
            return R.ok().errorMsg("已删除收藏!");
        }else{
            return R.error().errorMsg("收藏删除失败");
        }
    }

    //用户充值
    @PutMapping("/recharge/{money}/{id}")
    public R recharge (@PathVariable double money,@PathVariable String userName){
        int num= userService.recharge(money,userName);
        if (num>0) {
            return R.ok().errorMsg("充值成功").success(true);
        } else {
            return R.error().errorMsg("充值失败");
        }
    }


    //新增收货地址
    @PostMapping("/Addaddress")
    public R Addaddress(@RequestBody User user){
        int num=userService.Addaddress(user);
        if(num>0){
            return R.ok().errorMsg("新增地址成功").success(true);
        }else{
            return R.error().errorMsg("新增地址失败");
        }
    }

    //    删除收货地址
    @DeleteMapping("/delelteAddress/{id}")
    public R delelteAddress(@PathVariable("id") int id){
        int num=userService.delelteAddress(id);
        if(num>0){
            return R.ok().errorMsg("删除地址成功").success(true);
        }else{
            return R.error().errorMsg("删除地址失败");
        }
    }

    @PutMapping("/updateAddress")
    public R updateAddress(@RequestBody User user){
        if(user.getDefaultAddress()==0){//判断是否需要修改默认地址，0:默认地址，1：普通地址
            List<User> userAddress=userService.LookFoot(user.getUserId());//查询该用户所有收货地址
            for (int i=0;i<userAddress.size();i++) {//将用户收货地址进行便利循环
                if (userAddress.get(i).getDefaultAddress() == 0) {//判断用户是否设置过默认地址
                    int num=userService.quxiaoDefault(userAddress.get(i).getId());//如果有，将默认地址取消
                    if(num>0){
                        break;
                    }else{
                        return R.error().errorMsg("修改失败");//默认地址取消失败,返回失败
                    }
                }
            }
        }
        int num=userService.updateAddress(user);//判断结束后，正常修改
        if(num>0){
            return R.ok().errorMsg("修改成功!").success(true);
        }else{
            return R.error().errorMsg("修改成功!").success(false);
        }
    }


    //修改用户名
    @RequestMapping("updateUserName")
    public R updateUserName(@RequestParam String userName,@RequestParam int id) {
        User name = userService.logins(userName);
        User user=userService.userInfoId(id);
        if (ObjectUtils.isEmpty(name)) {//判断用户名是否存在
            int num = userService.updateUserName(userName, id);
            if (num > 0) {

                int nums=userService.updateAccountUserName(userName,user.getUserName());
                return R.ok().errorMsg("修改成功!");
            } else {
                return R.error().errorMsg("修改失败!");
            }
        }else {
            val id1 = name.getId();
            if(id1==id) {
                if (!ObjectUtils.isEmpty(name)) {
                    int num = userService.updateUserName(userName, id);
                    if (num > 0) {
                        int nums=userService.updateAccountUserName(userName,name.getUserName());
                        return R.ok().errorMsg("修改成功!");

                    } else {
                        return R.error().errorMsg("修改失败!");
                    }
                }else{
                    return R.error().errorMsg("用户不存在");
                }
            } else {
                return R.error().errorMsg("用户已存在");
            }
        }
    }


    //购买成功
    @PostMapping("/AddOrder")
    public R AddOrder(@RequestBody Product p){
        int num=userService.AddOrder(p);
        if(num>0){
            return R.ok().errorMsg("新增订单成功").success(true);
        }else{
            return R.error().errorMsg("新增订单失败");
        }
    }

    //    删除订单（删除多条）
    @RequestMapping("/DelOrder")
    public R delOrder(@RequestBody int[] ids){
        boolean flag=true;
        for (int i=0;i<ids.length;i++){
            boolean delflag=userService.DelOrder(ids[i]);
            if(!delflag){
                flag=false;
            }
        }
        if(flag){
            return R.ok().errorMsg("删除成功!");
        }else{
            return R.error().errorMsg("删除失败");
        }
    }

    //    删除订单（删除一条）
    @DeleteMapping("/DelOrder/{id}")
    public R delOrder(@PathVariable int id){
        boolean delflag=userService.DelOrder(id);
        if(delflag){
            return R.ok().errorMsg("删除成功!");
        }else{
            return R.error().errorMsg("删除失败");
        }
    }


    /**
     *查询地址
     * @param id 用户id
     * @return
     */
    @PostMapping("/LookFoot/{id}")
    public R LookFoot(@PathVariable("id") int id){
        List<User> data=userService.LookFoot(id);
        if(data.size()>0){
            return R.ok().date("data",data).errorMsg(" 查询地址成功").success(true);
        }else{
            return R.error().errorMsg("查询地址失败");
        }
    }


    //通过id查看地址信息
    @GetMapping("/byInfoAddress/{id}")
    public R byInfoAddress(@PathVariable int id){
        User p=userService.byIdInfoAddress(id);
        if(p!=null){
            return R.ok().date("address",p).errorMsg("地址查看成功");
        }else{
            return R.error().errorMsg("地址查看失败!");
        }
    }


    //查看金额
    @GetMapping("/infoConsume/{userId}")
    public R infoConsume(@PathVariable int userId){
        List<User> list=userService.infoConsume(userId);
        double chong=0;
        double xiaofei=0;
        for(int i=0;i<list.size();i++){
            if(list.get(i).getSource().equals("商城消费")){
                xiaofei+=list.get(i).getAmount();
            }else{
                chong+=list.get(i).getAmount();
            }
        }

        Map map=new HashMap();
        map.put("consume",xiaofei);
        map.put("recharge",chong);
        return R.ok().errorMsg("账户信息").date("map",map);
    }
}
